package com.yanfan.energy.service;


import com.yanfan.common.core.domain.AjaxResult;
import com.yanfan.energy.domain.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 生产管理模块接口
 *
 * @author caijinkang
 * @date 2022/12/8 9:21
 */
public interface ProductionService {

    /**
     * 查询绩效管理
     *
     * @param currPage
     * @param pageSize
     * @param date     格式：yyyy-MM
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2022/12/8 9:30
     */
    AjaxResult findPerformance(Integer currPage, Integer pageSize, String date);

    /**
     * 查询生产管理
     *
     * @param currPage
     * @param pageSize
     * @param type     类型（1、待处理，2、生产中，3、已完成）
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2022/12/8 13:40
     */
    AjaxResult findProduction(Integer currPage, Integer pageSize, Integer type);

    /**
     * 查询批次管理
     *
     * @param currPage
     * @param pageSize
     * @param type
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2022/12/8 13:46
     */
    AjaxResult findBatchManagement(Integer currPage, Integer pageSize, Integer type);

    /**
     * 查询订单管理
     *
     * @param currPage
     * @param pageSize
     * @param type
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2022/12/8 13:51
     */
    AjaxResult findOrderManagement(Integer currPage, Integer pageSize, Integer type);

    /**
     * 查询物料信息
     *
     * @param currPage
     * @param pageSize
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2022/12/8 14:03
     */
    AjaxResult findMaterials(Integer currPage, Integer pageSize);

    /**
     * 查询工位记录
     *
     * @param currPage
     * @param pageSize
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2022/12/8 14:16
     */
    AjaxResult findStationRecord(Integer currPage, Integer pageSize);

    /**
     * 出勤统计查询
     *
     * @param range
     * @param begin
     * @param end
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2022/12/9 11:17
     */
    AjaxResult findAttendanceRate(String range, String begin, String end);

    /**
     * 工种人数查询
     *
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2022/12/9 11:17
     */
    AjaxResult findOccupation();

    /**
     * 工位记录查询
     *
     * @param stationBody
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/9 10:34
     */
    AjaxResult findStationRecords(StationBody stationBody);

    /**
     * 新增工位记录
     *
     * @param stationRecords
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/9 10:52
     */
    AjaxResult addStationRecords(StationRecords stationRecords);

    /**
     * 更新工位记录
     *
     * @param stationRecords
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/9 14:24
     */
    AjaxResult updateStationRecords(StationRecords stationRecords);

    /**
     * 下载工位记录信息
     *
     * @param response
     * @author caijinkang
     * @date 2023/1/9 17:50
     */
    void stationRecordsByReport(HttpServletResponse response);

    /**
     * 物料信息查询
     *
     * @param materialsBody
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/9 10:41
     */
    AjaxResult findMaterialsInformation(MaterialsBody materialsBody);

    /**
     * 新增物料信息
     *
     * @param materials
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/9 15:00
     */
    AjaxResult addMaterialsInformation(Materials materials);

    /**
     * 更新物料信息
     *
     * @param materials
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/9 15:04
     */
    AjaxResult updateMaterialsInformation(Materials materials);

    /**
     * 查询物料详情
     *
     * @param materialRecordsBody
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/10 10:52
     */
    AjaxResult findMaterialsRecords(MaterialRecordsBody materialRecordsBody);

    /**
     * 下载物料信息
     *
     * @param response
     * @author caijinkang
     * @date 2023/1/9 17:50
     */
    void materialsInformationByReport(HttpServletResponse response);

    /**
     * 更新物料出入库信息
     *
     * @param materials
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/10 15:05
     */
    AjaxResult updateMaterialsNumber(Materials materials);

    /**
     * 下载物料详情出入库记录信息
     *
     * @param response
     * @author caijinkang
     * @date 2023/1/10 15:44
     */
    void materialsRecordsByReport(HttpServletResponse response);

    /**
     * 订单管理查询
     *
     * @param orderBody
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/9 10:48
     */
    AjaxResult findOrderLineDetails(OrderBody orderBody);

    /**
     * 新增订单管理
     *
     * @param orderLineDetails
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/9 15:54
     */
    AjaxResult addOrderLineDetails(OrderLineDetails orderLineDetails);

    /**
     * 更新订单管理
     *
     * @param orderLineDetails
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/9 15:55
     */
    AjaxResult updateOrderLineDetails(OrderLineDetails orderLineDetails);

    /**
     * 根据id删除订单管理信息
     *
     * @param id
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/9 15:59
     */
    AjaxResult deleteOrderLineDetails(Integer id);

    /**
     * 根据订单编号查询批次信息
     *
     * @param orderBody
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/11 11:37
     */
    AjaxResult findOrderDetailsByBatches(OrderBody orderBody);

    /**
     * 订单管理查询七项指标信息
     *
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/9 16:04
     */
    AjaxResult findOrderLineDetailsByTarget();

    /**
     * 查询生产排程信息
     *
     * @param schedulesBody
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/11 10:21
     */
    AjaxResult findSchedules(SchedulesBody schedulesBody);

    /**
     * 新增生产排程信息
     *
     * @param schedules
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/11 10:48
     */
    AjaxResult addSchedules(Schedules schedules);

    /**
     * 更新生产排程信息
     *
     * @param schedules
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/11 10:50
     */
    AjaxResult updateSchedules(Schedules schedules);

    /**
     * 下载生产排程信息
     *
     * @param response
     * @author caijinkang
     * @date 2023/1/11 10:53
     */
    void schedulesByReport(HttpServletResponse response);

    /**
     * 查询生产啊排程详细信息
     *
     * @param schedulesBody
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/11 11:01
     */
    AjaxResult findScheduleRecords(SchedulesBody schedulesBody);

    /**
     * 查询审批管理信息
     *
     * @param approvalsBody
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/11 14:54
     */
    AjaxResult findApprovals(ApprovalsBody approvalsBody);

    /**
     * 添加审批管理
     *
     * @param approvals
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/11 15:16
     */
    AjaxResult addApprovals(Approvals approvals);

    /**
     * 更新审批管理
     *
     * @param approvals
     * @return com.ruoyi.common.core.domain.entity.Approvals
     * @author caijinkang
     * @date 2023/1/11 15:16
     */
    AjaxResult updateApprovals(Approvals approvals);

    /**
     * 下载审批管理
     *
     * @param response
     * @author caijinkang
     * @date 2023/1/11 15:18
     */
    void approvalsByReport(HttpServletResponse response);

    /**
     * 查询任务管理信息
     *
     * @param assignmentsBody
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/12 17:04
     */
    AjaxResult findAssignments(AssignmentsBody assignmentsBody);

    /**
     * 任务开始
     *
     * @param id
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author
     * @date 2023/1/12 17:04
     */
    AjaxResult taskStart(Long id);

    /**
     * 任务完成
     *
     * @param id
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author
     * @date 2023/1/12 17:04
     */
    AjaxResult taskFinish(Assignments assignments);

    /**
     * 查询任务管理信息
     *
     * @param id
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author
     * @date 2023/1/12 17:04
     */
    Assignments findAssignmentsDetail(Long id);

    /**
     * 添加任务管理
     *
     * @param assignments
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/12 17:21
     */
    AjaxResult addAssignments(Assignments assignments);

    /**
     * 更新任务管理
     *
     * @param assignments
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/12 17:23
     */
    AjaxResult updateAssignments(Assignments assignments);

    /**
     * 下载任务管理信息
     *
     * @param response
     * @author caijinkang
     * @date 2023/1/12 17:24
     */
    void assignmentsByReport(HttpServletResponse response);

    /**
     * 根据用户id查询批次信息
     *
     * @param userId
     * @param currPage
     * @param pageSize
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/30 15:16
     */
    AjaxResult findProductionByUserId(Integer userId, Integer currPage, Integer pageSize);

    /**
     * 根据用户id查询分段信息
     *
     * @param userId
     * @param currPage
     * @param pageSize
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/31 9:33
     */
    AjaxResult findSubsectionByUserId(Integer userId, Integer currPage, Integer pageSize);

    /**
     * 根据用户id查询计划信息
     *
     * @param userId
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/31 10:29
     */
    AjaxResult findPlanByUserId(Integer userId);

    /**
     * 据订单编号查询批次编号
     *
     * @param orderNumber
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/31 11:09
     */
    AjaxResult findBatchNumberByOrderNumber(Integer orderNumber);

    /**
     * 根据批次编号查询分段编号
     *
     * @param batchNumber
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/31 11:11
     */
    AjaxResult findSectionNumberByBatchNumber(Integer batchNumber);

    /**
     * 查询所有订单编号
     *
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/31 11:39
     */
    AjaxResult findOrderLineDetailsNumber();

    /**
     * 查询所有物料分类下拉框信息
     *
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/31 11:45
     */
    AjaxResult findMaterialsClassify();

    /**
     * 查询所有工艺下拉框信息
     *
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/31 11:47
     */
    AjaxResult findMaterialsCraft();

    /**
     * 根据用户id查询任务列表
     *
     * @param userId
     * @param currPage
     * @param pageSize
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/1/31 15:35
     */
    AjaxResult findAssignmentsByUserId(Integer userId, Integer currPage, Integer pageSize);

    /**
     * 根据任务id找批次和分段
     *
     * @param orderBody
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/2/10 15:04
     */
    AjaxResult findScheduleBatchesByScheduleId(OrderBody orderBody);

    /**
     * 根据任务id找任务类型和物料信息
     *
     * @param scheduleId
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/2/2 14:22
     */
    AjaxResult findScheduleMaterialByScheduleId(Integer scheduleId);

    /**
     * 审批编辑项查询
     *
     * @param approvalId
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/2/3 9:09
     */
    AjaxResult findAssignmentTemplateMiddle(Integer approvalId);

    List<BaseOrderEntity> queryTaskEventType();

    List<BaseOrderEntity> queryTaskEventListByType(Long typeId);

    /**
     * 查询员工的批次进度
     *
     * @param userId
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/2/9 14:50
     */
    AjaxResult findUserBatchScheduleById();

    /**
     * 查询员工的首页信息
     *
     * @param userId
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/2/10 9:48
     */
    AjaxResult findUserInformationById();

    /**
     * 查询审批详情信息
     *
     * @param approvalsBody
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/2/10 16:52
     */
    AjaxResult findExamineParticulars(ApprovalsBody approvalsBody);

    /**
     * 根据订单id查询订单详情信息
     *
     * @param orderBody
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/2/13 10:12
     */
    AjaxResult findOrderParticularsInfo(OrderBody orderBody);

    /**
     * 根据排程id查询排程详情信息
     *
     * @param schedulesBody
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/2/13 14:41
     */
    AjaxResult findScheduleParticularsInfo(SchedulesBody schedulesBody);

    /**
     * 根据审批id修改审批的状态
     *
     * @param approvalsBody
     * @return com.ruoyi.common.core.domain.AjaxResult
     * @author caijinkang
     * @date 2023/2/16 18:10
     */
    AjaxResult updateExamineParticulars(ApprovalsBody approvalsBody);


}
